// 获取命令行参数（process.argv[0]是node路径，[1]是脚本路径，从[2]开始是用户参数）
const args = process.argv.slice(2);

// 程序使用说明
const usage = `
使用说明：
  node calc.js <数学表达式>
示例：
  node calc.js "1+2*3"
  node calc.js "Math.sqrt(16)"
参数：
  -h/--help  显示此帮助信息
注意：
  仅支持合法的JavaScript数学表达式，多余3个参数将被忽略
`;

// 处理参数逻辑
if (args.length === 0 || args[0] === '-h' || args[0] === '--help') {
  console.log(usage);
  process.exit(0); // 正常退出进程
}

// 只取前3个参数，拼接为表达式（支持带空格的表达式，如" (10 + 20) / 3 "）
const expression = args.slice(0, 3).join(' ').trim();

try {
  // 使用eval计算表达式（注意：生产环境避免使用eval，此处仅用于演示）
  // 限制表达式上下文，仅允许Math对象和数字运算，提升安全性
  const result = eval(`(function(Math) { return ${expression}; })(Math)`);
  
  // 验证结果是否为数字（排除非数学表达式的情况，如"a+b"）
  if (typeof result !== 'number' || isNaN(result)) {
    throw new Error('表达式结果不是有效数字');
  }

  console.log(`表达式：${expression}`);
  console.log(`计算结果：${result}`);
} catch (error) {
  console.error('❌ 错误：', '非法的数学表达式，请检查输入');
  process.exit(1); // 错误退出进程
}